# -*- coding: utf-8 -*-


# TODO: Prüfungsformen sind noch nicht implementiert.


from django.db import models


class Semester(models.Model):
    class Meta:
        verbose_name = u"Semester"
        verbose_name_plural = u"Semester"
    SEMESTER_CHOICES = (
        ('WS', u'Wintersemester'),
        ('SS', u'Sommersemester'),
    )
    semester = models.CharField(max_length=2, choices=SEMESTER_CHOICES, verbose_name=u"Semester")
    jahr = models.SmallIntegerField(verbose_name=u"Jahr")
    
    def __unicode__(self):
        return self.semester + unicode(self.jahr)


class Person(models.Model):
    class Meta:
        verbose_name = "Person"
        verbose_name_plural = u"Personen"
    vorname = models.CharField(max_length=50, verbose_name=u"Vorname")
    nachname = models.CharField(max_length=50, verbose_name=u"Nachname")

    def __unicode__(self):
        return u"{0}, {1}".format(self.nachname, self.vorname) 


class Studiengang(models.Model):
    class Meta:
        verbose_name = u"Studiengang"
        verbose_name_plural = u"Studiengänge"
    titel = models.CharField(max_length=50, verbose_name=u"Titel")
    signatur = models.CharField(max_length=20, unique=True, verbose_name=u"Signatur")
    verantwortlicher = models.ForeignKey(Person, verbose_name=u"Studiengangsverantwortlicher")

    def __unicode__(self):
        return u"{0} ({1})".format(self.titel, self.signatur)

    @models.permalink
    def get_absolute_url(self):
        return ('studiengang_view', [str(self.id)])

class Modulgruppe(models.Model):
    class Meta:
        verbose_name = u"Modulgruppe"
        verbose_name_plural = u"Modulgruppen"
    studiengang = models.ForeignKey(Studiengang, )
    name = models.CharField(max_length=50, verbose_name=u"Name")

    def __unicode__(self):
        return u"{0}: {1}".format(self.studiengang.titel, self.name)


class ModulInfo(models.Model):
    leistungspunkte = models.SmallIntegerField(verbose_name=u"Leistungspunkte", blank=True, null=True)
    inhalt = models.TextField(verbose_name=u"Inhalt", blank=True)
    lernziele = models.TextField(verbose_name=u"Lernziele", blank=True)
    literatur = models.TextField(verbose_name=u"Literaturhinweise", blank=True)
    fachgebiet = models.CharField(max_length=50, verbose_name=u"Fachgebiet", blank=True)
    semester_empfehlung = models.TextField(verbose_name=u"Semesterempfehlung", blank=True)
    dauer = models.SmallIntegerField(verbose_name=u"Dauer in Semestern", blank=True, null=True)
    voraussetzungen = models.TextField(verbose_name=u"Teilnahmevoraussetzungen", blank=True)
    
    class Meta:
        abstract = True


class Veranstaltung(ModulInfo):
    class Meta:
        verbose_name = u"Veranstaltung"
        verbose_name_plural = u"Veranstaltungen"
    titel = models.CharField(max_length=50, verbose_name=u"Titel")
    semester = models.ForeignKey(Semester, verbose_name=u"Semester")
    nummer = models.SmallIntegerField(verbose_name="Lehrveranstaltungsnummer")
    lehrformen = models.TextField(verbose_name=u"Lehrformen")
    arbeitsaufwand = models.TextField(verbose_name=u"Arbeitsaufwand")
    ort = models.TextField(verbose_name=u"Raum und Zeit")

    def __unicode__(self):
        return self.titel
    
    
class Modulbaustein(ModulInfo):
    class Meta:
        verbose_name = u"Modulbaustein"
        verbose_name_plural = u"Modulbausteine"
    titel = models.CharField(max_length=50, verbose_name=u"Titel")

    def __unicode__(self):
        return self.titel
    

class Pruefung(ModulInfo):
    class Meta:
        verbose_name = u"Prüfung"
        verbose_name_plural = u"Prüfungen"
    pruefer = models.ForeignKey(Person, verbose_name=u"Prüfer")
    modalitaeten = models.TextField(verbose_name=u"Prüfungsmodalitäten")
    veranstaltungen = models.ManyToManyField(Veranstaltung, verbose_name=u"Veranstaltungen")
    baustein = models.ForeignKey(Modulbaustein, verbose_name=u"Modulbaustein")
    semester = models.ForeignKey(Semester, verbose_name=u"Semester")
    unabhaengig = models.BooleanField(verbose_name=u"Unabhängiges Prüfungsmodul")

    def __unicode__(self):
        return u"{0}: Prüfung".format(unicode(self.baustein))


class Modul(ModulInfo):
    titel = models.CharField(max_length=50, verbose_name=u"Titel")
    signatur = models.CharField(max_length=20, unique=True, verbose_name=u"Signatur")
    modulgruppe = models.ForeignKey(Modulgruppe, verbose_name=u"Modulgruppe")
    verantwortlicher = models.ForeignKey(Person)
    bausteine = models.ManyToManyField(Modulbaustein, verbose_name=u"Bausteine")
    turnus = models.TextField(verbose_name=u"Turnus", blank=True)
    lp_voraussetzungen = models.TextField(verbose_name=u"Voraussetzungen für die Vergabe von Leistungspunkten")

    class Meta:
        verbose_name = u"Modul"
        verbose_name_plural = u"Module"

    def __unicode__(self):
        return u"{0} ({1})".format(self.titel, self.signatur)

    @models.permalink
    def get_absolute_url(self):
        return ('modul_view', [str(self.id)])

